home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 2
/
Gold Medal Software Volume 2 (Gold Medal) (1994).iso
/
wordproc
/
raved.arj
/
REPROF.DOC
< prev
next >
Wrap
Text File
|
1993-08-08
|
84KB
|
1,958 lines
Ravitz Editor 1.10 Profile Assembler
(C) Copyright Ravitz Software Inc. 1989,1991
Ravitz Software Inc.
P.O. Box 25068
Lexington, KY 40524-5068
USA
p-1
Contents
RE Profile Assembler ............................................. 3
Mnemonic Abbreviations 4
@BEEP - Beep On Error Messages ................................... 5
@CMDSAVELEN, @CMDSAVENUM - Command Recall List Qualifiers 5
@CSRPOSEDIT - Cursor Position After Edit Command ................. 5
@CSRSPEED, @CSRSPEEDV - Cursor Speed 5
@DATEFORM, @TIMEFORM - Date, Time Format ......................... 5
@DECOASTKB - Decoast Keyboard? 5
@DEFPRN - Default Printer ........................................ 5
@DEFSAVETP - Default Save Type 5
@DEFTABHAN - Default Tab Handling ................................ 6
@DEFWRAP - Default Word Wrap Margins 6
@EDCURFL - Edit Current Ffile..................................... 6
@EMKBBFPRM - Empty Keyboard Buffer For Prompt? 6
@ENHANCEDKB - Enhanced Keyboard Handling ......................... 6
@EXCHAR, @EXCHARST - Excluded Line Symbols 6
@EXFILENAME - Expand File Names .................................. 6
@FILETP - File Type 7
@FINDWORD(0..31) - Find Command Word Option ...................... 7
@GOTOMARGIN - Go To Margin 7
@HICSRFIND - Highlight Cursor After Find/Change .................. 7
@HORSCRNCOR, @VERSCRNCOR - Horizontal, Vertical Screen Correction 8
@INITRPLINS - Initial Replace / Insert Mode ...................... 8
@LNLEN - Line Length 8
@MENUPOS - Menu Position ......................................... 8
@MOUSE* - Mouse Configuration Parameters 8
@NONDOSMEM - Non-DOS Memory ...................................... 8
@POLLINPUT - Poll Input? 9
@SCRNWAIT - Color Screen Update Waits ............................ 9
@SHOWHIDSYS - Show Hidden and System Files in Directory List 9
@SORTDIR - Sort Directories ...................................... 9
@SORTSEQ(0..255) - Sorintg Sequence 9
@TBNEWLN - Top Bottom New Line Function .......................... 9
@TRASHLINES - Number Of Trash Lines 10
Screen Colors And Cursor Type ................................... 10
Function Key Definition 11
@specialkey And @specialkal - Special Keys ...................... 11
Key Assignment Table 12
RE Functions .................................................... 15
RE Functions - Basic 16
RE Functions - Cursor, Screen, Window ........................... 17
RE Functions - Special Characters 20
RE Functions - Configuration .................................... 20
RE Functions - Set And Unset Marks 20
RE Functions - Area Mark ........................................ 21
RE Functions - Line Exclude 22
RE Functions - Programming ...................................... 23
RE Functions - Values 26
Macros .......................................................... 28
Startup Macro 29
Variables ....................................................... 29
Manipulation of Macro Functions 29
Handy Macro Sequences ........................................... 30
continued
p-2
Querying Modes and Situations ................................... 31
Working With a Split Screen 31
Macro Control of Commands ....................................... 32
Macro Defined Shift Modes 33
Multifunction Macros ............................................ 33
Getkey and Structured User Input 34
Messages, Message Types, and User Defined Messages .............. 35
Tab Sets 36
Help Text ....................................................... 36
Menus 37
Panels .......................................................... 38
Compatibility and Technical Information 40
p-3
RE Profile Assembler
The Ravitz Editor EXE file can be set up to make it more effective
for specific uses. The program REPROF (file REPROF.EXE) is used to
generate personalized versions of RE.
REPROF reads a profile and creates a new RE.EXE. The calling
sequence is "REPROF (profile) (O-newexefile) (F)". If no profile is
specified then the default RE.EXE is created (this is the same as
using REPROF.1 unmodified). You can specify an output file with
O-filename. It must end with extension .EXE. F says to do a fast
help compression instead of the default compression. The fast help
compression is not as effective as the normal help compression, but
it is useful if you are debugging macros.
REPROF may be invoked from the RE command line using the current
session as the profile by using the command "di reprof
(o-newexefile) (f)". If there are any errors the cursor will be put
on the problem line upon return to RE.
The profile contains a list of modifications. First are byte and
word patches, macros, messages, and tab sets. The forms of the lines
are:
B location value value ... byte patch in the RE patch area
W location value value ... word patch in the RE patch area
X number function function ... first line of macro
Y function function ... continuation of macro
M number type message message definition
T number tabs tab set definition.
These are followed by the help text and menus.
Hex numbers are specified by prefixing them with $. ASCII values
other than 0..9, $, ^, &, @, and space may be specified with that
character for all values and functions (not locations). Mnemonics
are provided for all functions and locations, and most values.
Before the help text, lines that begin with "*" and blank lines are
ignored, and "//" means that the following text is a new profile
line. In the help text, lines with a "*" in column one are ignored,
blank lines are part of the help text, and // is part of the help
text.
The file REPROF.1 contains the profile with which the default
version of RE was created. REPROF.2 contains a few more functions
than the default profile and has a shortened help text. Use these
profiles as a starting point for creating your own profile.
The size of RE.EXE grows or shrinks to accommodate different profile
sizes. The total size of RE.EXE may not exceed 65536 bytes (64K).
(From 56K to 64K can only be help text, but this is rarely a
limitation.) This leaves at least 18K for your profile.
p-4
Mnemonic Abbreviations
To keep the location and function mnemonics short and consistent,
this list of abbreviations is used.
ABBREV FULL WORD ABBREV FULL WORD ABBREV FULL WORD
a- alt- for forward ps position
ar area ins insert rep repeat
bk backward kb keyboard rpl replace
c- ctrl- lf left rt right
cmd command ln line s- shift-
csr cursor md mode scrn screen
del delete mk mark ses session
def default np numeric keypad sp space
ent enter para paragraph tp type
ex exclude(d) pg page txt text
p-5
@BEEP - Beep On Error Messages
Normally RE beeps only on severe errors. To make all error messages
cause a beep, set the byte at @beep to ^error. The default is
^critical. ^no turns off all beeps.
@CMDSAVELEN, @CMDSAVENUM - Command Recall List Qualifiers
The byte at @cmdsavelen specifies the minimum length of a command
that will be added to the command recall list. The maximum number of
commands on the list is specified by the byte at @cmdsavenum.
@CSRPOSEDIT - Cursor Position After Edit Command
After a successful Edit command you can have the cursor placed on
the command line (default) or in the text area. Set the byte at
@csrposedit to ^cmdln or ^txtar to control this.
@CSRSPEED, @CSRSPEEDV - Cursor Speed
By default the horizontal cursor speed is tripled in typematic mode.
This is set with B @csrspeed 2. You can slow it to double speed with
1 and normal speed with 0. Higher numbers also allowed.
@csrspeedv works like @csrspeed except that it affects the vertical
cursor speed. 0 is the default.
@DATEFORM, @TIMEFORM - Date, Time Format
The word at @dateform sets the date format. This defaults to
^MM-DD-YY and can also be set to ^YY-MM-DD and ^YYYY-MM-DD. The
alternate formats are directly sortable.
The byte at @timeform sets the time format. The default is ^12hour
and ^24hour is the only alternative. ^24hour format is directly
sortable.
@DECOASTKB - Decoast Keyboard?
Keyboard decoasting can be turned off by changing the byte at
@decoastkb to ^no. The default is ^yes.
@DEFPRN - Default Printer
The default printer is specified by a Turbo Pascal string with a
maximum length of 8. There should be no trailing blanks in the
string. The length byte is at @defprn and the file or device name
begins immediately after this. The default is PRN. To set the
default printer to LPT2 use "B @defprn 4 l p t ^2".
@DEFSAVETP - Default Save Type
The byte at @defsavetp sets the default save type. This is normally
^backup, but may be set to ^direct or ^indirect. The save type may
also be set explicitly in each Save command.
p-6
@DEFTABHAN - Default Tab Handling
By default tabs are expanded on input but there is no tab
compression on output. This is controlled by the byte at @deftabhan.
It can be set to ^tabed(2..63) for tab expansion during the edit
command, ^tabedsv(2..63) for tab expansion during edit and tab
compression during save, or taboff(2..63) for no tab expansion or
compression. The numeric parameter to these functions is the number
of columns separating tab columns. It is needed even if you turn tab
handling off because tab handling can be overridden by edit and save
options. The default is ^tabed(8).
@DEFWRAP - Default Word Wrap Margins
The initial left and right word wrap margins are one byte values at
@defwrap. These are initially 1 and 255. The right word wrap margin
may be individually accessed with @defwraprt.
@EDCURFL - Edit Current Ffile
To cause the Edit command to default to the C option, which says to
look for a current file before getting it from the disk, change the
byte at @edcurfl from ^no to ^yes. This option is more accurate if
you also set @exfilename to ^yes.
@EMKBBFPRM - Empty Keyboard Buffer For Prompt?
To prevent RE from emptying the keyboard buffer for "Are you sure
(Y/N)?" and "Replace file (Y/N)?" change the byte at @emkbbfprm from
^yes to ^no.
@ENHANCEDKB - Enhanced Keyboard Handling
By default RE does not look for the enhanced keyboard. If you assign
functions to keys on the enhanced keyboard (see below), you need to
set the byte at @enhancedkb to ^auto to enable these keys. With the
enhanced keyboard enabled RE will still handle regular keyboards.
The default is ^off.
The reason for not looking for the enhanced keyboard by default is
that some resident programs cause RE to think that the enhanced
keyboard is there when it is not. Outside of such problems, you can
run on any PC with the enhanced keyboard enabled.
@EXCHAR, @EXCHARST - Excluded Line Symbols
The two characters used to show excluded lines and the start of each
line in an excluded group are bytes at @exchar and @excharst. They
are defaulted to - and +.
@EXFILENAME - Expand File Names
The byte at @exfilename is normally ^no, which says to leave file
names as entered. If you change this to ^yes then file names entered
with the Edit and Name commands will be expanded to include a disk
and path, and any trailing dot is removed.
p-7
@FILETP - File Type
By default RE reads and writes old style ASCII files (CR/LF (13,10)
at the end of every line and EOF (26) at the end of the file). If
you set the byte at @filetp to ^new, RE reads and writes new style
ASCII files (CR/LF at the end of every line except the last and no
EOF). The default is ^old. The advantage of old style files is
compatibility with other programs. The advantage of new style files
is that ASCII 26 may be used as a character within the file and the
trailing CR/LF/EOF sequence of old style files does not get in the
way on printer control files.
If you set RE up to use new style files, it can still read an old
style file but its final line will be an ASCII 26. If you leave that
line and save the file, it will still be a good old style file.
If RE is set up for old style files, it can read new style files in
general, but it will stop reading at the first ASCII 26, and it will
save the file as an old style file.
@FINDWORD(0..31) - Find Command Word Option
The characters that are considered to be part of a word by the W
(word) option of the F (find) command, the uppercase first letter
function, and the ^ifcharinword and ^ifcharnotinword functions are
specified by a Turbo Pascal set constant. The set is specified by 32
bytes at @findword(0..31). Each character is represented by one bit
in the set. Bits that are 1 represent characters that are part of a
word. Bits that are 0 are word separators. The default set is #, $,
%, 0..9, @, A..Z, a..z. The address of a bit as a function of the
ASCII code that it controls is:
the byte address is @findword(ASCII shr 3)
the bit within that byte is ASCII and 7.
@GOTOMARGIN - Go To Margin
When RE goes to a specific line with the go to function, or a Find,
Change, or line number command, it puts the line one line down from
the first line in the text area. This can be changed to any number
from 0 to 40. To do this, set the byte at @gotomargin to the desired
margin. The default is 1. RE dynamically limits the actual value
used to half the text area height, so 40 may be a useful value.
@HICSRFIND - Highlight Cursor After Find/Change
To cause the cursor to be highlighted after a successful find or
change, set the byte at @hicsrfind to 1..126 to set the number of
blinks or ^yes for indefinite blinking. The default is 2.
p-8
@HORSCRNCOR, @VERSCRNCOR - Horizontal, Vertical Screen Correction
When RE does an automatic horizontal screen scroll, it puts the
cursor ten spaces into the screen. This correction is specified in
the byte at @horscrncor and may be from 0 to 39. The default is 10.
When RE does an automatic vertical screen scroll during vertical
cursor movement, it puts the cursor on the edge of the screen. This
correction is specified in the byte at @verscrncor and may be from 0
to 40. The default is 0. RE dynamically limits the actual value used
to half the text area height, so you might find 40 a useful value.
@INITRPLINS - Initial Replace / Insert Mode
To set the initial replace / insert mode to insert, change the byte
at @initrplins to ^ins. The default is ^rpl.
@LNLEN - Line Length
The byte at @lnlen specifies the maximum line length for RE. It
defaults to the maximum of 255 and may be as low as the number of
columns on your screen. If it is less than this then RE will refuse
to start.
@MENUPOS - Menu Position
By default (B @menupos ^auto) menus pop up at the top or bottom of
the screen to avoid covering the cursor. If you prefer them to
always pop up at the bottom, set B @menupos ^bottom.
@MOUSE* - Mouse Configuration Parameters
You can configure RE's mouse handling with these patches:
B @mouse ^yes / ^no use mouse? default ^yes
B @mousereset ^hard / ^soft mouse reset type default ^hard
B @mousehsen 1..255 mouse ticks/column default 12
B @mousevsen 1..255 mouse ticks/line default 16
The @mousereset patch lets you use a software mouse reset. This may
be useful on computers that have very slow hardware mouse resets
(some IBM PS/2s). If you notice a two second delay on startup or
after a DOS shell, try B @mousereset ^soft.
You can also assign functions to the mouse buttons and movement. See
KEY ASSIGNMENT TABLE.
@NONDOSMEM - Non-DOS Memory
The byte at @nondosmem specifies what memory between 640K and 1088K
will be used by RE. The default is ^all which includes EMS memory,
XMS upper memory blocks, and the XMS high memory area. ^EMS says to
use just EMS, ^XMS says to use just the XMS areas, and ^none says to
use only standard DOS memory.
p-9
@POLLINPUT - Poll Input?
Normally RE polls the keyboard input. This is needed for the caps
lock indicator, cursor highlighting, mouse handling, and automatic
keyboard state panels. However it uses up battery power on some
laptop computers. Set the byte at @pollinput to ^no to turn off
polling - this will also shut off the caps lock indicator. Set it to
^yes to always do polling. Set it to ^auto to turn off polling only
when running on a PC Convertible. It is normally ^yes.
Regardless of how you set @pollinput polling will be turned on if
you use a mouse or automatic panels. Also polling is always in
effect while the cursor is highlighted, while RE is doing background
data defragmentation, and for a half second after each keystroke.
When running under DESQview RE returns unused time slices, so you
can leave polling on and still get good multitasking.
@SCRNWAIT - Color Screen Update Waits
On a color graphics adaptor RE waits for retraces to update the
screen to prevent "snow". Some CGAs do not need these waits. RE
normally does not do screen update waits on PCjrs, PC Convertibles,
PS/2 Model 30s and 80s, EGAs, VGAs, MDAs, any display mode other
than 2 or 3, and any mode with other than 80 columns. The byte at
@scrnwait can be set to ^auto (the default) to let RE make the
decision, ^yes to force waits, or ^no to disable waits.
@SHOWHIDSYS - Show Hidden and System Files in Directory List
Normally directory lists ignore hidden and system file. Set B
@showhidsys ^yes to include these files. The default is ^no.
@SORTDIR - Sort Directories
RE normally sorts directory lists. This can be disabled with B
@sortdir ^no. Subdirectories will be above files, but otherwise the
order will be the same as with a DIR command. The default is ^yes.
@SORTSEQ(0..255) - Sorintg Sequence
The default collating sequence for the Order command (without the C
option) is contained in an array of bytes from 0 to 255. This array
does not contain a sequence of ASCII codes but instead contains the
sort value for each ASCII code. This lets you define a number of
characters to have the same sort value. The address of the sort
value for ASCII code i is @sortseq(i).
@TBNEWLN - Top Bottom New Line Function
When you type a character on the Top --- or Bottom --- line, RE
inserts a new line, puts the cursor on it, and enters the character.
This line can be added with one of four functions: ^newln(1) -
cursor column is unchanged; ^newlnalign(1) - cursor is put under the
first nonblank of the previous line; ^newlncol1(1) - cursor goes to
column 1; or ^newlnww(1) - cursor goes to left word wrap column.
This is set with W @tbnewln function. The default ^newln(1).
p-10
@TRASHLINES - Number Of Trash Lines
Set B @savetrash to the number of lines to have RE keep in the trash
buffer. This can be 0, which disables the buffer, to 255.
Screen Colors And Cursor Type
There are four sets of screen color attributes, each with eighteen
attributes, listed below. RE reads the current display mode on
startup and after a DOS shell and chooses: the mono attributes for
mode 7; b/w attributes for modes 0 and 2; lcd attributes for any
other mode on a PC Convertible; and color attributes for anything
else. There are no mnemonics for the attribute values.
There is also a cursor type byte patch for each display mode -
@clrcsrtp, @b/wcsrtp, @moncsrtp, and @lcdcsrtp. Normally the PC
blinking cursor is turned off and moved off the screen - this is set
with ^noblink (the default). If it is desirable to have the PC
cursor track the noblink cursor, use ^noblink/bios. The PC cursor
will still be turned off but it will move with the noblink cursor.
This may cause problems with some resident programs that turn the
cursor on but do not turn it off when finished. Use ^bios to disable
the noblink cursor and enable the PC cursor.
ATTRIBUTE COLOR B/W MONO LCD
PATCH PATCH PATCH PATCH
LOCATION LOCATION LOCATION LOCATION
text @clrtxt @b/wtxt @montxt @lcdtxt
excluded line @clrextxt @b/wextxt @monextxt @lcdextxt
area marked text @clrarmk @b/warmk @monarmk @lcdarmk
area marked excl @clrarmkex @b/warmkex @monarmkex @lcdarmkex
position mark @clrpsmk @b/wpsmk @monpsmk @lcdpsmk
insert cursor @clrinscsr @b/winscsr @moninscsr @lcdinscsr
replace cursor @clrrplcsr @b/wrplcsr @monrplcsr @lcdrplcsr
error message @clrerrmsg @b/werrmsg @monerrmsg @lcderrmsg
status line @clrstln @b/wstln @monstln @lcdstln
inactive st line @clriastln @b/wiastln @moniastln @lcdiastln
command line @clrcmdln @b/wcmdln @moncmdln @lcdcmdln
top, bottom line @clrtopbot @b/wtopbot @montopbot @lcdtopbot
help title @clrhlpttl @b/whlpttl @monhlpttl @lcdhlpttl
help text @clrhlptxt @b/whlptxt @monhlptxt @lcdhlptxt
menu title @clrmenttl @b/wmenttl @monmenttl @lcdmenttl
menu text @clrmentxt @b/wmentxt @monmentxt @lcdmentxt
menu cursor @clrmencsr @b/wmencsr @monmencsr @lcdmencsr
menu text 2 @clrmentx2 @b/wmentx2 @monmentx2 @lcdmentx2
p-11
Function Key Definition
RE uses a translation table on all function keys. You may change
this table to add or change function key assignments. To make a
change: find the address in the KEY ASSIGNMENT TABLE that represents
the key of interest; find the RE function that represents the
function of interest; and assign the code to that address. There are
many functions that take two or more words. These can only be used
in macros, not in direct key assignments.
For example, to assign the autoscroll cursor movement functions to
the cursor keys, use these profile lines:
W @csrlf &csrlf // W @csrrt &csrrt
W @csrup &csrup // W @csrdn &csrdn
@specialkey And @specialkal - Special Keys
Starting at @specialkey are nine words that define the special keys
to use for cursor left, cursor right, cursor up, cursor down, enter,
esc, pgup, pgdn, and help in the drawing modes, when a message
requests that you press enter to continue, for the help system, and
for menus. The words contain the location in the key translation
table of the key to use. The default set is @csrlf, @csrrt, @csrup,
@csrdn, @ent, @esc, @pgup, @pgdn, and @a-f1. You must be sure to
assign only locations that contain normal RE functions, not ASCII
codes. Each location must be unique to be seen. If other keys have
the same function as the ones assigned here, then they will cause
the same action in the help system, etc.
At @specialkal is another set of nine words that are alternate
values for the special keys. They should have the same values as
those for @specialkey unless you want another key to have the same
function. The default set is @mouself, @mousert, @mouseup, @mousedn,
@mousebtnlf, @mousebtnrt, @pgup, @pgdn, and @a-f1. This lets the
mouse enter six of the special keys.
p-12
Key Assignment Table
KEY PATCH LOCATION DEFAULT RE FUNCTION
alt - @a-- &scrolllfcsr
alt = @a-= &scrollrtcsr
alt 1 @a-1 &repcurfind
alt 2 @a-2 &repcurchange
alt 3 @a-3 &fillnum
alt 4 @a-4 &blankarrem
alt 5 @a-5 &fillblock
alt 6 @a-6 &noop
alt 7 @a-7 &csrupoutline
alt 8 @a-8 &csrdnoutline
alt 9 @a-9 &shiftlf
alt 0 @a-0 &shiftrt
alt a @a-a &asciicode
alt b @a-b &mkcor
alt c @a-c ©lns
alt d @a-d &delar
alt e @a-e ¯o(125)
alt f @a-f &flow
alt f1 @a-f1 &help
alt f2 @a-f2 &noop
. . .
alt f10 @a-f10 &noop
alt g @a-g ¯o(101)
alt h @a-h &hicsr(10)
alt i @a-i &insar
alt j @a-j &rtjustify
alt k @a-k &eraseendln
alt l @a-l &mkln
alt m @a-m &movelns
alt n @a-n &newlnalign(1)
alt o @a-o &overlayar
alt p @a-p &set/re/unpsmk
alt q @a-q &nextses
alt r @a-r &reshow
alt s @a-s &split/join
alt t @a-t &noop
alt u @a-u &unmk
alt v @a-v ¯o(102)
alt w @a-w &setdrawingmd
alt x @a-x &exindentrem
alt y @a-y &recallcmdfor
alt z @a-z ¯o(100)
back tab @bktab &tabbkcurset
backspace/ctrl h @bksp &bksp
ctrl \ @c-\ 28
ctrl ] @c-] 29
ctrl - @c-- 31
ctrl 2 (null) @c-2 0
ctrl 6 @c-6 30
ctrl a @c-a 1
ctrl b @c-b 2
ctrl backspace @c-bksp &delln
ctrl c @c-c 3
p-13
ctrl d @c-d 4
ctrl e @c-e 5
ctrl end @c-end &bottomoffile
ctrl ent/ctrl j @c-ent 10
ctrl f @c-f 6
ctrl f1 @c-f1 &noop
. . .
ctrl f10 @c-f10 &noop
ctrl g @c-g 7
ctrl home @c-home &topoffile
ctrl k @c-k 11
ctrl l @c-l 12
ctrl left @c-lf &scrolllf(1)
ctrl n @c-n 14
ctrl o @c-o 15
ctrl p @c-p 16
ctrl page down @c-pgdn &scrolldn(1)
ctrl page up @c-pgup &scrollup(1)
ctrl q @c-q 17
ctrl r @c-r 18
ctrl right @c-rt &scrollrt(1)
ctrl s @c-s 19
ctrl t @c-t 20
ctrl u @c-u 21
ctrl v @c-v 22
ctrl w @c-w 23
ctrl x @c-x 24
ctrl y @c-y 25
ctrl z @c-z 26
cursor down @csrdn &csrdnwrap
cursor left @csrlf &csrlfwrap(1)
cursor right @csrrt &csrrtwrap(1)
cursor up @csrup &csrupwrap
delete @delete &delchar(1)
end @end &csrendln
enter/ctrl m @ent ^macro(106)
esc/ctrl [ @esc &csrcmd/txt
f1 @f1 ¯o(112)
f2 @f2 ¯o(113)
f3 @f3 ¯o(114)
f4 @f4 ¯o(115)
f5 @f5 ¯o(116)
f6 @f6 ¯o(117)
f7 @f7 ¯o(118)
f8 @f8 ¯o(119)
f9 @f9 ¯o(120)
f10 @f10 ¯o(121)
home @home &csrstartln
insert @insert &insrplmd
mouse down @mousedn &csrdn
mouse left @mouself &csrlf
mouse lf button @mousebtnlf ¯o(124)
mouse mid button @mousebtnmd &noop
mouse right @mousert &csrrt
mouse rt button @mousebtnrt &csrcmd/txt
mouse up @mouseup &csrup
page down @pgdn &scrolldncsr
p-14
page up @pgup &scrollupcsr
shift f1 @s-f1 &noop
. . .
shift f10 @s-f10 &noop
tab/ctrl i @tab &tabcurset
(E) alt [ @e-a-[ &noop
(E) alt ] @e-a-] &noop
(E) alt ; @e-a-; &noop
(E) alt ' @e-a-' &noop
(E) alt ` @e-a-` &noop
(E) alt \ @e-a-\ &noop
(E) alt , @e-a-, &noop
(E) alt . @e-a-. &noop
(E) alt / @e-a-/ &noop
(E) alt backsp @e-a-bksp &noop
(E) alt del @e-a-del &noop
(E) alt down @e-a-dn &noop
(E) alt end @e-a-end &noop
(E) alt enter @e-a-ent &noop
(E) alt esc @e-a-esc &noop
(E) alt f11 @e-a-f11 &noop
(E) alt f12 @e-a-f12 &noop
(E) alt home @e-a-home &noop
(E) alt ins @e-a-ins &noop
(E) alt kp * @e-a-np-* &noop
(E) alt kp - @e-a-np-- &noop
(E) alt kp + @e-a-np-+ &noop
(E) alt kp / @e-a-np-/ &noop
(E) alt kp ent @e-a-np-ent &noop
(E) alt left @e-a-lf &noop
(E) alt pg dn @e-a-pgdn &noop
(E) alt pg up @e-a-pgup &noop
(E) alt right @e-a-rt &noop
(E) alt tab @e-a-tab &noop
(E) alt up @e-a-up &noop
(E) center csr @e-cencsr &noop
(E) ctrl del/. @e-c-del &noop
(E) ctrl dn/2 @e-c-dn &noop
(E) ctrl f11 @e-c-f11 &noop
(E) ctrl f12 @e-c-f12 &noop
(E) ctrl ins/0 @e-c-ins &noop
(E) ctrl kp - @e-c-np-- &noop
(E) ctrl kp + @e-c-np-+ &noop
(E) ctrl kp / @e-c-np-/ &noop
(E) ctrl kp * @e-c-np-* &noop
(E) ctrl kp 5 @e-c-np-5 &noop
(E) ctrl tab @e-c-tab &noop
(E) ctrl up @e-c-up &noop
(E) f11 @e-f11 &noop
(E) f12 @e-f12 &noop
(E) shift f11 @e-s-f11 &noop
(E) shift f12 @e-s-f12 &noop
(E) in front of a key means that the key is detected only on an
enhanced keyboard. These keys are all assigned no operation by
default. To use any of the (E) keys, you must enable enhanced
keyboard handling with the patch "B @enhancedkb ^auto".
p-15
RE Functions
Below are the RE functions, catagorized into:
BASIC
CURSOR, SCREEN, WINDOW
SPECIAL CHARACTERS
CONFIGURATION
SET AND UNSET MARKS
AREA MARK
LINE EXCLUDE
PROGRAMMING
VALUES.
Any function (except the ASCII characters) prefixed with & instead
of ^ will be the same function but keyboard decoasted. For example,
&scrolllf(1) scrolls left 1 column and is decoasted, while
^scrolllf(1) scrolls left 1 column but is not decoasted.
From a macro the & and ^ distinction is different - & means end the
macro if the function is not successful and ^ means continue the
macro regardless of the outcome. See MACROS.
There is no range checking on the numeric parameters of functions,
so be careful.
Functions that use parameters that are separate tokens may be used
only in macros. These parameters should not be between $F000 and
$FFFF. If they are, they may be mistaken for a label or one of the
value functions.
p-16
RE Functions - Basic
^a(0..255) ASCII 0..255
^asciicode enter ASCII code
^bksp backspace
^blankln blank current line
^clrchgd clear session changed flag
^clrmodadd clears the line mod and add status bits
^defrag defragment, display free memory
^delchar(1..127) delete 1..127 characters
^delln delete non-excluded line
^eraseendln erase end of line
^execcmd execute command
^execcmdnorecall execute command - do not save command for
recall
^help help
^help(1..25) help starting on page A..Y
^hicsr(1..127) highlight cursor for 1..126 blinks or
indefinitely
^insmd insert mode
^insrplmd insert mode/replace mode
^join join lines
^newln(1..128) insert 1..128 new lines, don't change
cursor column
^newlnalign(1..128) insert 1..128 new lines, align cursor
^newlncol1(1..128) insert 1..128 new lines, put cursor in col 1
^newlnww(1..128) insert 1..128 new lines, put cursor in
left word wrap column
^overlaycmd overlay pending command at cursor
Does not work on command line.
^overlaydate overlays date at cursor
^overlayfile overlays file name at cursor
^overlaytime overlays time at cursor
^recallcmdbk recall commands reverse order
^recallcmdfor recall commands
^repcurchange repeats current change (including cmd line)
^repcurfind repeats current find (including cmd line)
^repdispchange repeat displayed change
^repdispfind repeats displayed find
^reshow reshow
^rplmd replace mode
^setchgd set session changed flag
^setdrawingmdcc set drawing mode current character
^setdrawingmddl set drawing mode double line
^setdrawingmdoff set drawing mode off
^setdrawingmdsl set drawing mode single line
^setshiftmd(0..26) set shift mode to off, a..z
^settabset(1..10) set tab set to 1..10
^setwwlf set left word wrap margin to cursor pos
^setwwlfx x set left word wrap margin to x
^setwwrt set right word wrap margin to cursor pos
^setwwrtx x set right word wrap margin to x
^split split line
^split/join split line/join lines
^wordcmdln moves the word at the cursor to cmd line
p-17
RE Functions - Cursor, Screen, Window
^bottomoffile to bottom of file
^csrcmd/txt cursor to command line/text
^csrcmdln cursor to command line
^csrcolx x cursor to column x
^csrdn cursor down without wrap
^csrdn(1..78) cursor down 1..78 lines without wrap
(dynamically limited to 1 screen)
^csrdnoutline cursor down to next line that starts on or
to the left of the cursor
^csrdnoutlinemk cursor down to next line that starts on or
to the left of the cursor ignoring text
outside of current area mark margins
^csrdnwrap cursor down with wrap
^csrdnwrap(1..77) cursor down 1..77 lines with wrap
(cursor stops at line 1, top and bottom of
each window)
^csrendln cursor to end of line
^csrlf cursor left 1 col without wrap
^csrlf(0..127) cursor left 254,1..127 cols without wrap
^csrlfwrap cursor left 1 col with wrap
^csrlfwrap(0..127) cursor left 254,1..127 cols with wrap
(cursor stops at col 1, right side)
^csrnextendpara cursor to next line after paragraph
^csrnextendparamk crsr to next line after paragraph ignoring
text outside of current area mark margins
^csrnextpara cursor to first line of next paragraph
^csrnextparamk cursor to next paragraph ignoring text
outside of current area mark margins
^csrprevendpara cursor to previous line after paragraph
^csrprevendparamk cursor to prev line after paragraph ignoring
text outside of current area mark margins
^csrprevpara cursor to first line of prev paragraph
^csrprevparamk cursor to previous paragraph ignoring text
outside of current area mark margins
^csrreturn cursor return
^csrrt cursor right 1 col without wrap
^csrrt(0..127) cursor right 254,1..127 cols without wrap
^csrrtwrap cursor right 1 col with wrap
^csrrtwrap(0..127) cursor right 254,1..127 cols with wrap
(cursor stops at col 1, right side)
^csrstartln cursor to start of line
^csrtxt cursor to text
^csrup cursor up without wrap
^csrup(1..78) cursor up 1..78 lines without wrap
(dynamically limited to 1 screen)
^csrupoutline cursor up to next line that starts on or to
the left of the cursor
^csrupoutlinemk cursor up to next line that starts on or
to the left of the cursor ignoring text
outside of current area mark margins
^csrupwrap cursor up with wrap
^csrupwrap(1..77) cursor up 1..77 lines with wrap
(cursor stops at line 1, top and bottom of
each window)
p-18
^gotoarmk go to area mark (top left corner)
^gotoarmkbl go to bottom left corner of area mark
^gotoarmkbr go to bottom right corner of area mark
^gotoarmktr go to top right corner of area mark
^gotopsmk go to position mark
^nextses next edit session
^prevses previous edit session
^scrollcenln scroll current line to center of screen
^scrolldn(0..78) scroll down 0..78 lines - max 1 screen
^scrolldn1/2pg scroll down 1/2 page
^scrolldn1/4pg scroll down 1/4 page
^scrolldn1/8pg scroll down 1/8 page
^scrolldn1pg scroll down 1 page
^scrolldncsr scroll down to cursor
^scrolllf(0..127) scroll left 254,1..127 cols
^scrolllfcsr scroll left to cursor
^scrollrt(0..127) scroll right 254,1..127 cols
^scrollrtcsr scroll right to cursor
^scrollup(0..78) scroll up 0..78 lines - max 1 screen
^scrollup1/2pg scroll up 1/2 page
^scrollup1/4pg scroll up 1/4 page
^scrollup1/8pg scroll up 1/8 page
^scrollup1pg scroll up 1 page
^scrollupcsr scroll up to cursor
^splitscrn(6..77) splits the screen at line 6..77
This function restricts windows to a minimum
of three text lines.
^tabauto1ln(0..127) auto tab looking at current line,
max 254,1..127
^tabauto2ln(0..127) auto tab looking at 2 lines,
max 254,1..127
^tabauto3ln(0..127) auto tab looking at 3 lines,
max 254,1..127
^tabauto4ln(0..127) auto tab looking at 4 lines,
max 254,1..127
^tabauto5ln(0..127) auto tab looking at 5 lines,
max 254,1..127
^tabauto6ln(0..127) auto tab looking at 6 lines,
max 254,1..127
^tabauto7ln(0..127) auto tab looking at 7 lines,
max 254,1..127
^tabauto8ln(0..127) auto tab looking at 8 lines,
max 254,1..127
^tabbkauto1ln(0..127) auto back tab looking at current line,
max 254,1..127
^tabbkauto2ln(0..127) auto back tab looking at 2 lines
max 254,1..127
^tabbkauto3ln(0..127) auto back tab looking at 3 lines
max 254,1..127
^tabbkauto4ln(0..127) auto back tab looking at 4 lines
max 254,1..127
^tabbkauto5ln(0..127) auto back tab looking at 5 lines
max 254,1..127
^tabbkauto6ln(0..127) auto back tab looking at 6 lines
max 254,1..127
^tabbkauto7ln(0..127) auto back tab looking at 7 lines
max 254,1..127
p-19
^tabbkauto8ln(0..127) auto back tab looking at 8 lines
max 254,1..127
^tabbkcurset bk tab - ref current tab set
^tabcurset tab - ref current tab set
^topoffile to top of file
^unsplitscrn unsplit the screen
^windowa make window a active
^windowa/b make other window active
^windowb make window b active
p-20
RE Functions - Special Characters
^0 0
^1 1
^2 2
^3 3
^4 4
^5 5
^6 6
^7 7
^8 8
^9 9
^amp &
^at @
^crt ^
^dlr $
^sp space
RE Functions - Configuration
^enhancedkbauto enable enhanced keyboard (if attached)
^enhancedkboff disable enhanced keyboard support
^setatb/w installs the b/w attribute set
All future screen updates use the new
attributes and the b/wcsrtp. To rewrite the
screen completely, use ^updatescrn.
^setatclr installs the color attribute set
^setatcur installs the current attribute set
^setatlcd installs the lcd attribute set
^setatmon installs the monochrome attribute set
RE Functions - Set And Unset Marks
^mkcol mark column of area
^mkcolres mark column of area with mark resizing
^mkcor mark corner of area
^mkcorlm mark corner of area - always uses last area
mark margin, not word wrap margin, for alt-l
alt-b
^mkcorlmres mark corner of area with mark resizing
^mkcorres mark corner of area with mark resizing
^mkln mark line of area
^mklnres mark line of area with mark resizing
^mkses mark entire session
^set/re/unpsmk set/reset/unset position mark
^setpsmk set position mark
^unmk unmark area
^unsetpsmk unset position mark
p-21
RE Functions - Area Mark
^blankar blank area
^blankarnsc blank area - no on screen check
^blankarrem blank area - remove mark
^blankarremnsc blank area - remove mark - no on scrn check
^center center
^centerrem center - remove mark
^copylns copy line area
^delar delete block/line area
^delblock delete block area
^delblocknsc delete block area - no on screen check
^delblockrem delete block area - remove mark
^delblockremnsc del blk area - remove mark - no scrn check
^dellns delete line area
^fillblock fill with block pattern
^fillblockrem fill with block pattern - remove mark
^fillnum fill with numeric line pattern
^fillnumrem fill with numeric line pattern - remove mark
^flow flow text
^flowextrasp flow with extra blank at end of sentence
^flowextraspkp flow with extra blank at end of sen, kp mark
^flowkp flow text, keep mark
^flowlist flow into list
^flowlistkp flow into list, keep mark
^insar insert area
^lfside left side
^lfsiderem left side - remove mark
^lowercase lowercase
^lowercaserem lowercase - remove mark
^mergeoverlay merging overlay (overlays only where target
is blank)
^movearmk moves area mark (not contents) to cursor
^movelns move line area
^overlayar overlay area
^rtjustify right justify
^rtjustifyexspkp rt justify, extra space after sen, keep mark
^rtjustifyextrasp right justify, extra space after sentence
^rtjustifykp right justify, keep mark
^rtside right side
^rtsiderem right side - remove mark
^shiftdn shift down area
^shiftdnrem shift down area - remove mark
^shiftlf shift left area
^shiftlfrem shift left area - remove mark
^shiftrt shift right area
^shiftrtrem shift right area - remove mark
^shiftup shift up area
^shiftuprem shift up area - remove mark
^uppercase uppercase
^uppercaserem uppercase - remove mark
^upperfirst uppercase first letter
^upperfirstrem uppercase first letter - remove mark
p-22
RE Functions - Line Exclude
^exaddnotmod exclude added and unmodified
^exaddnotmodrem exclude added and unmodified - remove mark
^exaddnotmodses exclude added and unmodified in session
^exall exclude all in mark
^exallrem exclude all in mark - remove mark
^exallses exclude all in session
^exchildren excludes children
^exindent exclude by indentation
^exindentrem exclude by indentation - remove mark
^exindentses exclude by indentation entire session
^exln exclude one line
^exmkchildren excludes children ignoring data outside the
area mark margins
^exnone unexclude all in mark
^exnonerem unexclude all in mark - remove mark
^exnoneses unexclude all in session
^exnotadd exclude old lines
^exnotaddrem exclude old lines - remove mark
^exnotaddses exclude old lines in session
^exnotmod exclude unmodified lines
^exnotmodadd exclude unmodified old lines
^exnotmodaddrem exclude unmodified old lines - remove mark
^exnotmodaddses exclude unmodified old lines in session
^exnotmodrem exclude unmodified lines - remove mark
^exnotmodses exclude unmodified lines in session
^expara exclude by paragraph
^expararem exclude by paragraph - remove mark
^exparases exclude by paragraph entire session
^exrestoreses restores the excluded state for the session
from the last saved state
^exsaveses saves the excluded state for the session
^revexlns reverse excluded lines in area
^revexlnsrem reverse excluded lines in area - remove mark
^revexlnsses reverse excluded lines in session
^unexchildren unexcludes children
^unexfirstln unexclude first line in group
^unexlastln unexclude last line in group
^unexmkchildren unexcludes children ignoring text outside
the current area mark margins
p-23
RE Functions - Programming
^dispmsg(0..63) displays message 0..63
See MESSAGE NUMBERS for text/number list.
^dispmsgnum(0..63) displays message 0..63 followed by var(0)
^endmacro end macro
This is automatically supplied by REPROF at
the end of each macro, but is needed to end
a macro from inside the macro.
^execfcn executes function contained in var 0
^getkey gets a keystroke and puts it in var 0
special keys are translated
(see GETKEY AND STRUCTURED USER INPUT)
^getkeyns gets a keystroke and puts it in var 0
special keys are not checked for
^halt breaks out of macro system
^if= x y if x=y
^if> x y if x>y
^if< x y if x<y then don't skip next token
^if<= x y if x<=y
^if>= x y if x>=y
^if<> x y if x<>y (not equal)
^if<>0 x if x<>0 (not equal)
^if=0 x if x=0
^ifcharblank if current character is blank
^ifcharinword if current char is in a word
This function checks if the current
character is in the set of characters used
with the Find commands Word option.
^ifcharnotblank if current char is not blank
^ifcharnotinword if current char is not in a word
^ifcsrcmdln if cursor on cmd line don't skip next token
^ifcsrtxt if cursor in text area
^ifeditable if current line is editable
^ifinsmd if insert mode
^iflnadd if current line was added
^iflnblank if current line or excluded group is blank
^iflnexcluded if current line is excluded
^iflnmk if current line has an area mark
^iflnmod if current line is modified
^iflnnotadd if current line was not added
^iflnnotblank if cur line or excluded group not blank
^iflnnotexcluded if current line not excluded
^iflnnotmk if current line does not have an area mark
^iflnnotmod if current line is not modified
^iflnnotpsmk if current line does not have an pos mark
^iflnnottopbot if cursor is not on TOP --- or BOTTOM ---
^iflnpsmk if current line has a position mark
^iflntopbot if cursor is on TOP --- or BOTTOM --- line
^ifnoteditable if current line not editable
^ifnotsuccess if previous function was not successful
"Not found", "No files" messages as well as
any error messages make this true.
^ifpendingcmd x if uppercase(first nonblank on command
line) is x (set x to ^0 to catch 0..9)
^ifpendingcmdnot x if uppercase(first nonblank on command line)
is not x (set x to ^0 to catch 0..9)
p-24
^ifrplmd if replace mode
^ifsuccess if previous function was successful
^ignoreexlnsmd sets ignore excluded lines mode on/off
^ignoreexlnsmd1 sets ignore excluded lines mode on only for
the next non-control function
^ignoreexlnsmdoff sets ignore excluded lines mode off
^ignoreexlnsmdon sets ignore excluded lines mode on
Sets "permanent" ignore excluded lines mode.
It will be turned on only if there is an
area mark and will be turned off by any
functions that do not use this mode. This is
not used in either REPROF.1 or REPROF.2.
^inhibitscrn inhibit display updates
Causing an "Are you sure? (Y/N)" prompt,
going into help mode, or not being in a
macro updates the screen and enables screen
updates.
^jumpbk(1..126) jump backwards 1..126 macro tokens
^jumpbklb(1..63) jump backward to label
^jumpfor(1..126) jump 1..126 macro steps
^jumpforlb(1..63) jump forward to label
^jumpforlbcycle(1..10) jump forward to label 1..n
^jumpforlbcycle jumps to label 1..n based on
the number of consecutive macro calls. Each
leg of the macro must end with ^setprevfcn
^macro(*) to continue the cycle. See
MULTIFUNCTION MACROS.
^keyfcn x executes the function at address x
^label(1..63) label noop
^label(*) label noop catches all jump*lb(1..63)
^macro(0..127) execute macro 0..127
^macro(*) execute current macro (this is for use
with ^setprevfcn, ^setvar, etc.)
^menu(1..39) displays menu A..Y, 1..9, α, ß, Γ, π, Σ
(see MENUS)
^noop no operation
^panel(1..39) displays panel A..Y, 1..9, α, ß, Γ, π, Σ
(see PANELS)
^patchbyte a b patch byte b at address a
Do not patch @lnlen. Colors will not be
updated until after a DOS shell or ^setat*
function.
^patchbytes(1..63) a b patches 1..63 bytes starting at a
^patchword a w patch word w at address a
^patchwords(1..63) a w patches 1..63 words starting at a
^pause pause for about 1 second
^rescsrps restores cursor position, ins/rpl mode
^resexmd restores ignore excluded lines mode
^resfindchange restores find, change strings, options
^resseschg restores session chgd state
^savecsrps saves cursor position, insert/replace
mode, session changed flag, find/change
variables, ignore excluded lines mode flag
^setprevfcn x set previous function variable to x
^suppressays suppress "Are you sure?" or "Replace file?"
on next fcn
p-25
^updatescrn update screen, allow updates
This function is needed to turn the screen
on before a macro is finished or to update
the screen colors after ^setat*. If a macro
ends with the screen disabled, a complete
screen update is done automatically.
^updatescrninh update screen but keep inhibited
This function may be used to update the
screen with a new permanent panel without
the user seeing anything.
^varadd(0..15) x var(0..15) := var(0..15) + x
X should be less than $F000.
^varand(0..15) x var(0..15) := var(0..15) and x
^vardiv(0..15) x var(0..15) := var(0..15) div x
^varmul(0..15) x var(0..15) := var(0..15) * x
^varor(0..15) x var(0..15) := var(0..15) or x
^varset(0..15) x var(0..15) := x
^varsub(0..15) x var(0..15) := var(0..15) - x
^vartype(0..15) types character representation of low byte
of variable 0..15
^if functions that evaluate to false skip one macro token. If the
desired true function uses more than one token, use the reverse if
function and jump around the function. For example, instead of
^if=0 ^var(1) ^varset(0) 1
which will not work correctly, use
^if<>0 ^var(1) ^jumpfor(3) ^varset(0) 1.
p-26
RE Functions - Values
For any functions that have parameters that are separate tokens, the
following functions may be used as parameters. The variables that
contain the values cannot be directly written - they must be updated
by RE functions that affect them, for example setting an area mark
sets armkcol1 and armkcol2.
^@mac x the patch offset of macro x
^armkcol1 left area mark column
^armkcol2 right area mark column
These are not accurate unless there is an
area mark.
^armkmd ^sp, a, or á (032, 097, or 160)
^armknotonscrn 0 if area mark is on the screen
^armkses session pointer of area mark session
Pointers change during database
defragmentation - across macros, DOS
shells, area mark functions.
^armkwd area mark width
^bytepatch a byte at patch address a
^chgd 0 if the session is unchanged
^curchar character under cursor
This value is not accurate unless the
current line is editable.
^curcol current cursor file column
^curlinenum current file line number
^currow current screen row (1..80)
^curscol current cursor screen column
^curses session pointer of current session
^curwindow current window (0, 1 for a, b)
^drawingmd drawing mode (0..3)
^inarmk 0 if the cursor is not in the area mark
^maxlnwidth maximum line length
^msgnum current message number
^psmkcol position mark column
This is not accurate unless there is a
position mark.
^psmkses session pointer of position mark session
This is not accurate unless there is a
position mark.
^insrplmdval 0 for replace, 1 for insert
^otherwinses session pointer of the inactive window
^scrncol leftmost column on screen
^scrnheight virtual screen height in lines
(active window, status, command)
^scrnheightfull full screen height in lines
(windows, perm panel, status, command)
^scrnsplit number of text lines in window a or 0 if
there is no split
^scrnwidth screen width in columns
^shiftmd shift mode
^var(0..15) value of variable 0..15
^wordpatch a word at patch address a
^wordwrapcol1 left word wrap column
^wordwrapcol2 right word wrap column
p-27
@* numeric value of any patch location
^* numeric value of any function except
those noted here
For example:
^if= ^var(0) ^var(1) compares var(0) and var(1)
^varset(2) ^curchar sets var(2) to the current
character
^varset(1) ^bytepatch @defwraprt sets var(1) to the default right
word wrap margin.
p-28
Macros
RE lets you define up to 127 macros numbered 1 to 127. To put a
macro in in an RE profile, use the line
X macronumber function function ...
and the macro may be continued on a new line with
Y function function ...
Macros are nestable to a depth of 16 calls. No checking is done to
insure that the stack does not overflow - it is up to you to not
exceed this maximum. If a macro calls another macro and the next
function in the first macro is ^endmacro then this is equivalent to
jumping to the new macro rather than calling it and no extra stack
space is taken.
To use macro number i, assign the function ¯o(i) to a key.
The functions are listed in RE FUNCTIONS. When functions are called
from a macro, if a function is prefixed with & instead of ^ then if
the function causes an error message, the macro is prematurely
ended. If not then the macro continues despite the message. Messages
that do not cause the macro to end, even if the function is prefixed
with & are Changed, Default disk/dir changed, Enter ASCII code,
Found, Free memory low, Free paragraphs, Numeric fill overflow,
Printed, Saved.
Some functions are considered control functions and cannot affect
the current position or database. These functions do not update
messages, reset cyclic functions, or reset the "are you sure?"
continued feature (this lets you do repeated destructive shifts
without being prompted each time). The functions are:
^endmacro ^jump.. ^patch..
^getkey.. ^keyfcn ^setprevfcn
^halt ^label ^updatescrn
^if.. ^macro ^var.. (except vartype)
^ignoreexlnsmd1 ^menu
^inhibitscrn ^panel
So if you construct a macro of just these functions with a single
core operation, any dependance of the core operation on the previous
function is transferred through the control functions. The following
macro shifts the contents of the area mark left if in insert mode
and right if in replace mode, and repeated destructive shifts do not
cause "are you sure?" prompts.
X 60 ^ifinsmd &shiftlf ^ifrplmd &shiftrt.
To use draw mode from inside a macro trace out the drawing with
^keyfcn @csrup, ^keyfcn @csrdn, ^keyfcn @csrlf, and ^keyfcn @csrrt.
p-29
Startup Macro
Macro 0 is the startup macro. When RE has finished reading in its
initial file, before user input is allowed, macro 0 is called. Macro
0 is just like any other macro except for this.
In REPROF.1 and REPROF.2 macro 0 does nothing.
Variables
RE has 16 word (unsigned 2 byte) variables numbered 0..15. Variable
i is set with ^varset(i) x, and accessed as a parameter with
^var(i). You can add to a variable (^varadd(i) x), subtract
(^varsub), multiply (^varmul), divide (^vardiv), or (^varor), or and
(^varand). The low byte of a variable may be typed, as if entered
from the keyboard, with ^vartype(i).
Variable 0 is special. It is used by the functions: ^execfcn which
executes the function represented by the value of var(0);
^menu(0..39) which processes a menu and returns the result in
var(0); ^getkey which gets a keyboard entry and puts the associated
function into var(0), translating special keys into ^jumpforlb
functions; ^getkeyns which is like ^getkey except that special keys
are not translated; and ^dispmsgnum(0..63) which displays a message
followed by the value of var(0).
To set var(1) to the value of var(4) use ^varset(1) ^var(4). To
compare var(1) to var(4) use ^if= ^var(1) ^var(4).
Manipulation of Macro Functions
Each token in an RE macro is one word, with an associated mnemonic.
If a function has separate parameters (^setwwrtx x for example) then
the parameter is a separate token and a variable may be used for the
parameter. If the function has an attached parameter
(^setshiftmd(0..26) for example) then that parameter is part of the
function token and must be a constant. If you need such a parameter
to be variable you can generate the required function in the macro.
Set variable 0 to the function with a 0 parameter, add the desired
parameter to variable 0, and then execute the function in variable
0. For example to do the function ^setshiftmd(^var(1)) (which is not
allowed) use this code:
^varset(0) ^setshiftmd(0) ^varadd(0) ^var(1) ^execfcn
p-30
Handy Macro Sequences
Here are a few useful macro sequences. The first two put the cursor
on the top and bottom of the current window.
^if= ^currow 1 ^csrdn ^if<> ^currow ^scrnheight ^csrdnwrap(77)
^if= ^currow 3 ^jumpfor(3) ^csrcmdln ^csrdn
These put the cursor at the left and right side of the screen.
^if<> ^curcol 1 ^csrlfwrap(0)
^if<> ^curcol ^scrnwidth ^csrrtwrap(0)
Here are traditional page up and page down sequences.
^savecsrps ^scrollup1pg ^rescsrps
^savecsrps ^scrolldn1pg ^rescsrps
Also see REPROF.MAC. This is a set of macros that may be useful
including:
rotating permanent panels
record and playback keystrokes
move marked area
box the perimeter of the area mark
delete blank lines in the area mark
load multiple files on startup
tab functions that insert or delete spaces in insert mode.
p-31
Querying Modes and Situations
There are many direct ^if statements available for querying the
state of RE, but there also are many possible queries that require
looking at specific variables. Here is a list of useful ^if
commands.
^if<>0 ^inarmk if cursor is in area mark
^if<>0 ^chgd if session has been changed
^if<>0 ^armknotonscrn if area mark is not in the window
(assumes an area mark exists)
^if<>0 ^psmkses if there is a position mark
^if= ^psmkses ^curses if the current session has a pos mark
^if<> ^armkmd ^sp if there is an area mark
^if= ^armkmd a if there is a completed area mark
^if= ^armkses ^curses if area mark is in the current session
(assumes an area mark exists)
^if= ^shiftmd 3 if shift mode is 3
^if<>0 ^drawingmd if in one of the drawing modes
^if= ^curcol 34 if the cursor is in column 34
^if= ^curcol ^armkcol1 if cursor is in the left area mark col
(assumes an area mark exists)
^if= ^curchar S if the current character is S
^if<>0 ^scrnsplit if screen is split
Working With a Split Screen
To a macro (and to RE internally) a split screen window appears to
be just an ordinary small screen. That is, the cursor row (^currow)
moves sequentially 1, 3, 4, ..., ^scrnheight. But you can get the
actual cursor row by using ^scrnsplit. To put the cursor's actual
screen row in var(1), use:
^varset(1) ^currow
^if= ^curwindow 0 ^jumpfor(3) ^varadd(1) ^scrnsplit
Here is a function that splits the screen at the current line, or
unsplits the screen if it is already split.
X 1
Y ^if=0 ^scrnsplit ^jumpfor(3) ^unsplitscrn ^endmacro
Y ^ifcsrcmdln ^jumpfor(4) ^varset(0) ^currow ^jumpfor(7)
Y ^varset(0) ^scrnheight ^varadd(0) 2 ^vardiv(0) 2
Y ^varadd(0) ^splitscrn(1) ^execfcn
The ^splitscrn function will not allow a window of less than three
text lines. If you unsplit the screen, put up a permanent panel, and
then split it again at the same line (the recommended procedure for
displaying a permanent panel), the position of the split may change.
And if you change the number of lines on the screen from a DOS
shell, RE may reconfigure the screen split (or even unsplit it) to
insure that each window has three lines.
p-32
Macro Control of Commands
The enter key may be re-programmed to examine pending commands and
take specific action based on that information. In REPROF.1 and
REPROF.2 the mouse and keyboard enter functions are:
* mouse enter
X 105 ^macro(124) ^if=0 ^var(0) ^endmacro
Y ^macro(112)
* keyboard enter
X 106 ^macro(124) ^if=0 ^var(0) ^endmacro
Y ^csrreturn
Macro 124 looks for a pending command and executes it, setting
var(0) to 0 if it found a command or 1 if not.
* execute pending command and set var(0) to 0 or 1 if no command
X 124 ^varset(0) 1
Y ^ifcsrtxt ^jumpfor(4)
Y ^iflnblank ^endmacro ^jumpfor(7)
Y ^ifpendingcmd F ^jumpfor(4)
Y ^ifpendingcmdnot C ^endmacro
Y ^execcmd ^varset(0) 0
You can replace macro 124 to change the way it decides if a command
is pending or the way that it executes the command. An example is:
* execute pending command and set var(0) to 0 or 1 if no command
X 124 ^varset(0) 1
Y ^ifcsrtxt ^jumpfor(3)
Y ^iflnblank ^endmacro
Y ^ifpendingcmd F ^jumpforlb(2)
Y ^ifpendingcmd C ^jumpforlb(2)
Y ^ifcsrtxt ^endmacro
Y ^ifpendingcmdnot S ^jumpfor(9)
Y ^varset(0) ^curses // * save-clear mod add flags
Y &execcmd
Y ^if= ^curses ^var(0) ^clrmodadd
Y ^jumpforlb(1)
Y ^ifpendingcmdnot E ^jumpfor(7)
Y &execcmd // * edit-exclude at col 3
Y ^csrtxt ^csrrt(2) ^exindentses ^csrcmdln
Y ^jumpforlb(1)
Y ^ifpendingcmdnot ^0 ^jumpfor(3)
Y ^execcmdnorecall // * don't save line num cmds
Y ^jumpforlb(1)
Y ^label(2) ^execcmd
Y ^label(1) ^varset(0) 0
p-33
Macro Defined Shift Modes
You can set the user shift mode with the ^setshiftmd(0..26)
function. 0 is the default. 1..26 are displayed on top of the caps
lock indicator as a..z.
Here is a macro that rotates between shift modes a, b, and off
X 1 ^if<>0 ^shiftmd ^jumpfor(3) ^setshiftmd(1) ^endmacro
Y ^if<> ^shiftmd 1 ^jumpfor(3) ^setshiftmd(2) ^endmacro
Y ^setshiftmd(0)
And to use the shift modes, here is a macro that looks at the
shift mode and does one of three different functions.
X 2 ^if<>0 ^shiftmd ^jumpforlb(1)
Y functions for shift mode off ...
Y ^endmacro
Y ^label(1) ^if<> ^shiftmd 1 ^jumpforlb(1)
Y functions for shift mode 1 ...
Y ^endmacro
Y ^label(1) ^if<> ^shiftmd 2 ^endmacro
Y functions for shift mode 2 ...
You can also use the patch functions to reset key assignments when a
new shift mode is set, so you could reassign the entire function key
set based on shift mode.
If you use shift modes, it is a good idea to set a permanent panel
for each mode. This makes it obvious what mode is current and
provides some help for that mode. See PANELS.
Multifunction Macros
The RE macro language makes it easy to create macros that do
different functions on consecutive calls. This feature is used in
the default profile on the alt-v key to produce the center function
on the first press, left side on the second, and right side on the
third. Similar (though some a little more complex) macros are used
to rotate drawing modes (alt-z), move to the various marks (alt-g),
and exclude and unexclude children (alt-6). Here is the
center/left/right macro.
X 102 ^jumpforlbcycle(3)
Y ^label(1) ¢er ^jumpfor(6)
Y ^label(2) &lfside ^jumpfor(3)
Y ^label(3) &rtside
Y ^setprevfcn ^macro(*)
^jumpforlbcycle jumps to one of label 1..3 based on the number of
consecutive calls to macro 102 (any number up to 10 may be used). To
keep the cycle going, before the macro is called a second time, RE
must think that the most recent function was that macro. ^setprevfcn
^macro(*) just before ending the macro does this.
p-34
Getkey and Structured User Input
^getkey gets a key from the user and puts the function that is
assigned to that key in variable 0. If any of the special keys are
pressed then they are returned as ^jumpforlb(i) where i is:
1 for cursor left 4 for cursor down 7 for page up
2 for cursor right 5 for enter 8 for page down
3 for cursor up 6 for escape 9 for help
^getkeyns is the same as getkey except that special keys are not
checked for.
This lets you create structured data input macros. An example is a
macro that gets a user selection from vertical list. The cursor is
left on the selected line and variable 0 contains ^jumpforlb(5) for
enter or ^jumpforlb(6) for escape.
M 50 ^msg Select line // * define message 50
X 1
Y ^csrtxt ^csrlf(0)
Y ^label(1) ^dispmsg(50) ^getkey
Y ^if< ^var(0) ^jumpforlb(3) ^jumpbklb(1)
Y ^if> ^var(0) ^jumpforlb(9) ^jumpbklb(1)
Y ^execfcn
Y ^label(3) ^csrup ^jumpbklb(1) // * csrup
Y ^label(4) ^csrdn ^jumpbklb(1) // * csrdn
Y ^label(7) ^keyfcn @pgup ^jumpbklb(1) // * pgup
Y ^label(8) ^keyfcn @pgdn ^jumpbklb(1) // * pgdn
Y ^label(9) ^help(4) ^jumpbklb(1) // * help pg 4
Y ^label(5) ^ifnoteditable ^jumpbklb(1) // * enter
Y ^label(6) ^dispmsg(0) // * esc
This macro puts up a panel and, on the next keystroke, removes it
and executes the keystroke.
X 1 ^panel(34) ^getkeyns ^updatescrn ^execfcn
If you need to look for a specific key, rather than a function, the
only way to do it is to compare the function returned from ^getkey
with the function assigned to that key. If the function on the key
is not unique then other keys can trigger the same response. You
need to and off $80 from the key function because that is used by
the keyboard routine and then removed. For example, to get a key and
check to see if it was alt-s:
^getkey
^varset(1) ^wordpatch ^@a-s ^varand(1) $FF7F
^if= ^var(0) ^var(1)
Functions $4000 to $4FFF are not used by RE. You can assign these to
keys, use ^getkey or ^getkeyns to get the function, and have a macro
interpret them. This may be useful when getting user input that is
only valid when a specific panel is displayed. Or $80 with the
number to enable keyboard decoasting.
p-35
Messages, Message Types, and User Defined Messages
NUMBER MESSAGE TYPE NUMBER MESSAGE TYPE
0 A wd- ht- $18 24 Printed $08
1 Changed $08 25 Incorrect number $05
2 Found $08 26 DOS memory error $2F
3 Line(s) too long $1D 27 Drive not ready $07
4 Saved $28 28 Disk write protected $07
5 Insufficient free memory $25 29 Incorrect option $05
6 Line(s) split $1F 30 Incorrect file name $05
7 Not found $0C 31 Incorrect Find string $05
8 Saved - file replaced $28 32 Incorrect Change string $05
9 Memory full - Data Lost $07 33 Are you sure? (Y/N) $01
10 Parameter too long $05 34 Mark is not in session $05
11 Area mark already exists $05 35 Free paragraphs $08
12 No area mark $05 36 Numeric fill overflow $08
13 reserved $05 37 Cannot use display mode $25
14 No mark $05 38 Defragmenting memory $00
15 Free memory low $08 39 Replace file? (Y/N) $00
16 Incorrect cursor position $05 40 Press Enter to continue $00
17 Disk/device error $07 41 Default disk/dir changed $09
18 Mark is not on screen $05 42 No files $0C
19 Enter ASCII code $00 43 Changed > 10000 $08
20 Incorrect command $05 44 Found > 10000 $08
21 Insufficient disk space $07 45 user defined message $00
22 Not in ring $05 . . .
23 Insert A:, press Enter $00 63 user defined message $00
The message type bytes are at @MSGTP(0..63). The bits of the message
type bytes are:
$1 - red (and beep if "B @beep ^error" is set)
$2 - beep (unless "B @beep ^no" is set)
$4 - ends a macro if displayed by an & prefixed function
This bit is also queried by the ^ifsuccess function.
$8 - this message indicates a command or function was successful If
a command finishes with this message then it is stored in the
recall list and the command line is blanked.
$10 - this message indicates an edit command was successful
An Edit command starts a new session and reads in a file. If
the file read finishes with this message then the new session
is kept, otherwise the new session is removed from memory.
$20 - if RE ends with this message, display it in DOS
The message type mnemonics are ^critical ($07), ^error ($05), ^msg
($00).
You may define messages 45..63 (and rewrite 0..44). To set a message
use the line "M number type message" anywhere in the profile before
the help text. Number is the message number, type is the message
type (^critical, ^error, ^msg, or a number), and the message text is
up to 25 characters. For example: "M 45 ^msg Macro complete".
Use the function ^dispmsg(0..63) to display a message.
^dispmsgnum(0..63) displays a message followed by the value of
variable 0.
p-36
Tab Sets
You may define up to ten tabs sets numbered 1..10. Set 1 must be
defined since it is the default that RE sets up on entry.
To define a tab set, use the line
T setnumber column column ...
To choose an automatic tab function, set column 1 to 0, column 2 to
the number of lines above the current line to look at (0..7), and
column 3 to the maximum number of columns to move (1..254).
The default tab set is an automatic tab function: "T 0 4 8".
The tabs sets are selected with the T command and are used only by
the ^lftabcurset and ^rttabcurset functions.
Help Text
The help text follows all patches, macro, tab sets, and messages. It
starts with a special line containing @ in column one. This is the
bottom line of each help screen (if there is room for it). In the
default profile it is blank. Then for each of up to 25 help screens,
is the title line beginning with "A".."Y". Following the title line
is the body of the screen, in columns 2 through 81. The help pages
must be in order and use consecutive page letters starting with A.
Set B @lastpghelp to the last page of the help text. For example:
B @lastpghelp C
@F1,Esc-Quit help A..C-Page A..C PgDn-Next Page ..
AHelp Menu
A Help Menu
B Basic Commands
C Basic Functions
BBasic Commands
To execute a command, enter the command on the command line, ..
.
.
CBasic Functions
Alt-A Enters an ASCII code
.
.
Note that Z is not a valid help page letter.
p-37
Menus
Menus are the same as help screens except they are limited to 9
lines (plus the title) and the help screen letter is extended to
cover 39 screens/menus. The menu letter must not overlap help
screens and must follow the last help screen (help A..R, menus U..5
in REPROF.PR1). The menu letter may be A..Y, 1..9, α, ß, Γ, π, or Σ
and these are referred to as 1..39 in the menu function.
The menu item fields are columns 2..21, 22..41, 42..61, and 62..81
on each line. These fields are numbered 11,21,31,41, 12,22,32,42,
etc. If the first character in a field is nonblank then that field
has an item. If any character in the field up to the first blank
(ASCII 32 but not ASCII 0 or 255) is a capital letter, then it may
be selected by the user with that letter.
You must write a macro to control a menu. The menu is displayed with
^menu(1..39) and the menu routine has control until a user response
is made. When control is given back to the macro the user response
is in variable 0. It may be any RE function except ASCII 0..255 and
^noop. If the response is one of the menu items then variable 0
contains a ^jumpforlb(item) function. If the response is one of the
last four special keys (see @SPECIALKEY - SPECIAL KEYS) then escape
gives ^jumpforlb(6), page up gives ^jumpforlb(7), page down gives
^jumpforlb(8), and help gives ^jumpforlb(9). Any other key gives the
function assigned to that key. The response in var(0) may be queried
to filter some responses and/or executed.
The menu routine always displays the menu, even if ^inhibitscrn mode
is on and leaves the display in ^inhibitscrn mode. ^updatescrn will
reset this as will ending the macro.
The menu function is a control function and does not update
messages, the "are you sure?" continued feature, etc.
Here is a sample menu and a macro to control it:
NGeneral Functions
mark block resize set position mark single draw
mark line resize unset position mk double draw
mark column resize
X 114 ^label(1) ^menu(14)
Y ^if= ^var(0) ^macro(*) ^endmacro // * toggles menu on/off
Y ^execfcn ^endmacro // * executes response which
// * may be a ^jumpforlb
Y ^label(6) ^endmacro // * esc
Y ^label(7) ^macro(113) ^endmacro // * pgup
Y ^label(8) ^macro(115) ^endmacro // * pgdn
Y ^label(9) ^help(8) ^endmacro // * help page 8
Y ^label(11) &mkcorres ^endmacro
Y ^label(12) &mklnres ^endmacro
Y ^label(13) &mkcolres ^endmacro
Y ^label(21) &setpsmk ^endmacro
Y ^label(22) &unsetpsmk ^endmacro
Y ^label(31) &setdrawingmdsl ^endmacro
Y ^label(32) &setdrawingmddl
p-38
Panels
Panels are the same as menus (and may be mixed with them) except
that they are displayed with ^panel(0..39) and once displayed,
control is immediately returned to the caller. The display is
inhibited. You can get user input with ^getkey or ^getkeyns. Panels
may be any number of lines, but are dynamically cut to fit within
the screen height - 5 lines.
Here is a sample panel and control macro that displays some
information and at the next keystroke redisplays the screen and
executes the keystroke. This assumes special key definitions @csrlf,
@csrrt, @csrup, @csrdn, @ent, @esc, @pgup, @pgdn, and @a-f1.
OInformation Panel
any information ...
any information ...
any information ...
X 115 ^panel(15) ^getkey ^updatescrn ^execfcn ^endmacro
Y ^label(1) ^keyfcn @csrlf ^endmacro
Y ^label(2) ^keyfcn @csrrt ^endmacro
Y ^label(3) ^keyfcn @csrup ^endmacro
Y ^label(4) ^keyfcn @csrdn ^endmacro
Y ^label(5) ^keyfcn @ent ^endmacro
Y ^label(6) ^keyfcn @esc ^endmacro
Y ^label(7) ^keyfcn @pgup ^endmacro
Y ^label(8) ^keyfcn @pgdn ^endmacro
Y ^label(9) ^keyfcn @a-f1
If you don't want to intercept any special keys then you can use:
X 115 ^panel(15) ^getkeyns ^updatescrn ^execfcn
One panel may be made permanent by setting B @permpanel to the panel
number. Permanent panels are displayed during editing but are
overwritten by DOS shells, help text, and generally by menus
(depending on the cursor position), but they are restored
automatically after this.
This panel may be changed with a macro but you must insure that the
cursor is not covered by the new panel and that window B still has
at least three text lines. To set a permanent panel which may have a
different height than the current permanent panel use this code. It
unsplits the screen, displays the new panel, and resplits the
screen. This avoids all potential problems.
y ^inhibitscrn ^savecsrps ^csrcmdln
y ^varset(0) ^scrnsplit ^if<>0 ^var(0) ^unsplitscrn
y ^patchbyte @permpanel (panel#) ^updatescrninh
y ^if=0 ^var(0) ^jumpfor(4) ^varadd(0) ^splitscrn(2) ^execfcn
y ^rescsrps ^updatescrn
p-39
The automatic permanent panel feature sets the permanent panel to
one of four panels based on the state of the keyboard. The first
panel is for the unshifted state, the second for when the alt key is
pressed, the third for when the control key is pressed, and the
fourth for when the shift key is pressed.
To use this feature, set B @autopanel and B @permpanel to the number
of the first automatic panel. The next three panels (sequential) are
for alt, ctrl, and shift. Each of the panels should have the same
height - the keyboard routine rewrites the panels blindly and does
not worry about the details needed for different sized panels. The
byte at @apdelay specifies a delay before the display of the alt,
ctrl, and shift panels in 1/18 second (one PC timer tick). Setting
this to approximately 9 helps prevent excessive screen changes.
RE updates the @permpanel byte with the current automatic panel as
it polls the keyboard.
These panels will not overwrite help, menus, or transient panels,
but will overwrite any current permanent panel. If you let it
overwrite a permanent panel, do not let it take up more space than
the current panel, because the keyboard routine will not be able to
handle the situation if the cursor or window B is covered by the new
panel.
p-40
Compatibility and Technical Information
REPROF will run on any IBM compatible MS-DOS computer, in a memory
space of 96K, under any standard environment.
REPROF is a pure Turbo Pascal program. All input and output uses the
Turbo Pascal library. Screen writes use Turbo Pascal's standard
write functions. REPROF takes no interrupts beyond those taken by
the Turbo Pascal startup code.
REPROF was written by Cary Ravitz and compiled with Borland's Turbo
Pascal 6.0 and Turbo Assembler 2.0.